﻿namespace Bread.Utility;

public static class LinearAlgebra
{
    /// <summary>
    /// 计算向量P1P2和向量P1P的叉积，用于判断点p和P1P2所在直线的位置关系。<br/>
    /// 可根据右手定则判断叉积的方向（正负）。<br/>
    /// 已考虑屏幕图形坐标系与笛卡尔坐标系 Y 相反的问题。
    /// </summary>
    public static double Cross(PointD p1, PointD p2, PointD p)
    {
        return (p1.X - p2.X) * (p.Y - p1.Y) - (p2.Y - p1.Y) * (p1.X - p.X);  // 
    }

    /// <summary>
    /// 求直线斜率。<br/>
    /// 已考虑屏幕图形坐标系与笛卡尔坐标系 Y 相反的问题。
    /// </summary>
    public static double Slope(PointD p1, PointD p2)
    {
        if (p1.X == p2.X) return 0;
        return (p2.Y - p1.Y) / (p1.X - p2.X);
    }
}
